#include <iostream>
using namespace std;

//1 引用的基本概念 
//2 属于c++编译器对c的扩展 c++语法范畴
int main01(int argc, char const *argv[]){
        int a = 10;

        int &b = a; //b就是a,    b就是a的别名 就是给已经存在的变量 再取一个名字

        printf("b:%d \n", b);
        printf("a:%d \n", a);

        b = 100;  //相当于把a修改成了100

        printf("b:%d \n", b);
        printf("a:%d \n", a);

        a = 200;
        
        printf("b:%d \n", b);
        printf("a:%d \n", a);

        return 0;
}


int main02(int argc, char const *argv[]){
        int a = 10;
        int &b = a;
        //int &c;    //编译失败  原因是 普通引用 必须初始化
        return 0;
}

//
void myswap(int a, int b){
        int c = 0;
        c = a;
        a = b;
        b = c;
}
void myswap2(int *a, int *b){
        int c = 0;
        c = *a;
        *a = *b;
        *b = c;
}
//引用做函数参数不需要初始化
void myswap3(int &a, int &b){
        int c = 0;
        c = a;
        a = b;
        b = c;
}
int main(int argc, char const *argv[]){
       int x ,y ;
        x= 10;
        y = 20;

        myswap(x, y);
        printf("x:%d, y:%d\n", x, y); //这是交换不了的

        //myswap2(&x, &y);
        //printf("x:%d, y:%d\n", x, y); //这是c语言用指针交换

        //a 就是x的别名 b就是y的别名
        myswap3(x, y);
        printf("x:%d, y:%d\n", x, y); //这是c++语言的交换        

        return 0;
}
//引用在java和php等其他语言中  传一个参数到函数,其实就是引用 